﻿using Ionic.Zip;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SilverlightFileUploader.Web
{
    public partial class TestPage : System.Web.UI.Page
    {
        protected string _sandbox;


        protected void Page_Load(object sender, EventArgs e)
        {
            //_sandbox = ConfigurationSettings.AppSettings["SandboxPath"];
            System.Configuration.ConfigurationManager.AppSettings["SandboxPath"] = Server.MapPath("~/Uploads");

            //befülle die DropDownListe
            if (DropDownList1.Text == String.Empty)
            {
                var di = new DirectoryInfo(Server.MapPath("~/Backup/"));
                foreach (var fi in di.GetFiles())
                {
                    DropDownList1.Items.Add(fi.Name);
                }
            }
        }

        protected void button2_Click(object sender, EventArgs e)
        {
            DirectoryInfo dir = new DirectoryInfo(Server.MapPath("~/Uploads/"));
            try
            {
                AnalyseFrom(dir.GetFiles().First().FullName);
            }
            catch (Exception exc)
            {
                Label2.Text = exc.Message;
            }
            button2.Enabled = false;
        }

        List<string> completefiles = new List<string>()
            {
                "flex_fachgruppe_komplett.csv" , "flex_prfbem_komplett.csv" , "flex_prffach_komplett.csv" ,
                "flex_prffachver_komplett.csv" , "flex_semester_komplett.csv" , "flex_studab_komplett.csv" , 
                "flex_studabver_komplett.csv", "flex_studfach_komplett.csv" , "flex_teilprf_komplett.csv"
            };

        List<string> updatefiles = new List<string>()
            {
               "flex_prfstd_sample.csv" , "flex_studenfach_sem_sample.csv" ,
               "flex_student_sample.csv" 
            };


        protected void button3_Click(object sender, EventArgs e)

        {
            BackUp();

            //alte Backup-Datei löschen
            var backupdi = new DirectoryInfo(Server.MapPath("~/Backup/"));
            foreach (var fi in backupdi.GetFiles())
            {
                if (completefiles.Contains(fi.Name) || (updatefiles.Contains(fi.Name)))
                {
                    fi.Delete();
                }
            }

            ImportFrom(Server.MapPath("~/Analyzing/"));

            button3.Enabled = false;

        }

        protected void Button4_Click(object sender, EventArgs e)
        {
            AnalyseFrom(Server.MapPath("~/Backup/") + DropDownList1.SelectedValue.ToString());
            ImportFrom(Server.MapPath("~/Analyzing/"));
            button3.Visible = false;
            Label4.Text = "Backup erfolgreich abgeschlossen!" ;

        }

        protected void Button5_Click(object sender, EventArgs e)
        {
            Response.Redirect("http://msv-3188.sb.dfki.de/Pivotbrowser/#/Browse");
        }

        protected void Button6_Click(object sender, EventArgs e)
        {
            Response.Redirect(Request.RawUrl);
        }

        //analyse
        private void AnalyseFrom(string str)
        {

            var di = new DirectoryInfo(Server.MapPath("~/Analyzing/"));

            // clean up folder
            foreach (var fi in di.GetFiles())
            {
                fi.Delete();
            }

            // decompress new files
            using (ZipFile zip = new ZipFile(str))
            {
                if (zip.EntryFileNames.All(x => x.ToUpper().EndsWith(".CSV")))
                {
                    zip.ExtractAll(Server.MapPath("~/Analyzing/"));
                    Label3.Text = "Dateien erfolgreich extrahiert. Analysiere Tabellen...";
                }
                else
                {
                    Label3.Text = "Die .zip-Datei darf nur .csv-Dateien enthalten!";
                }
            }

            //analyze file names
            List<string> possiblefiles = new List<string>()
            {
                "flex_fachgruppe_komplett.csv" , "flex_prfbem_komplett.csv" , "flex_prffach_komplett.csv" ,
                "flex_prffachver_komplett.csv" , "flex_prfstd_sample.csv" , "flex_semester_komplett.csv" ,
                "flex_studab_komplett.csv" , "flex_studabver_komplett.csv" , "flex_studenfach_sem_sample.csv" ,
                "flex_student_sample.csv" , "flex_studfach_komplett.csv" , "flex_teilprf_komplett.csv"
            };

            bool error = false;

            foreach (var fi in di.GetFiles())
            {
                if (possiblefiles.Contains(fi.Name))
                {
                    possiblefiles.Remove(fi.Name);
                }
                else
                {
                    error = true;
                    Label4.Text = "Unpassende oder doppelte Datei: " + fi.Name;
                    break;
                }
            }

            if (!error)
            {
                Label4.Text = "Keine Fehler";
                button3.Visible = true;
            }

        }
        
        //import
        private void ImportFrom(string str)
        {
            String ConnectionCredentials = @"Data Source=msv-3188.sb.dfki.de\SQLEXPRESS;
                                             Initial Catalog=IWISQL;
                                             Persist Security Info=True;
                                             User ID=uid;   
                                             Password=vagina";

            SqlConnection con = new SqlConnection(ConnectionCredentials);

            var di = new DirectoryInfo(str);
    
            foreach (var fi in di.GetFiles())
            {
                con.Open();

                string filepath = str + fi.ToString();

                StreamReader sr = new StreamReader(filepath, System.Text.Encoding.GetEncoding("iso-8859-1"), true);
                string line = sr.ReadLine();
                string[] value = line.Split(';');
                DataTable dt = new DataTable();
                DataRow row;
                foreach (string dc in value)
                {
                    dt.Columns.Add(new DataColumn(dc));
                }

                while (!sr.EndOfStream)
                {
                    value = sr.ReadLine().Split(';');
                    if (value.Length == dt.Columns.Count)
                    {
                        row = dt.NewRow();
                        row.ItemArray = value;
                        dt.Rows.Add(row);
                    }
                }

                SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
                bc.BulkCopyTimeout = 120;

                //unterscheide zwischen sample und complete Dateien!
                if (completefiles.Contains(fi.Name))
                {
                    //lösche Tabelle
                    //hier werden die Zeichen ".csv" entfernt um den Table zu identifizieren...
                    string delete = "DELETE FROM " + "dbo." + fi.Name.ToString().Remove(fi.Name.Length - 13, 13);
                    SqlCommand command = new SqlCommand(delete, con);
                    command.ExecuteReader();

                    bc.DestinationTableName = "dbo." + fi.Name.ToString().Remove(fi.Name.Length - 13, 13);

                    bc.BatchSize = dt.Rows.Count;
                    bc.WriteToServer(dt);
                    sr.Dispose();
                    bc.Close();
                }
                else
                    //sicherstellen der UPDATE Funktion bei import schon vorhandener Daten
                {   
                    string tablename = "dbo." + fi.Name.ToString().Remove(fi.Name.Length - 11, 11) + "_dummy";
                    bc.DestinationTableName = tablename;

                    bc.BatchSize = dt.Rows.Count;
                    bc.WriteToServer(dt);
                    sr.Dispose();
                    bc.Close();

                    //unterscheide INPUT-TAbellen: 
                    string merge = "";

                    switch (tablename)
                    {
                        case "dbo.flex_student_dummy":
                            merge = "MERGE INTO dbo.flex_student as s USING dbo.flex_student_dummy as sd ON (s.MATRNR = sd.MATRNR) WHEN MATCHED THEN UPDATE SET   VORNAME = sd.VORNAME,  NACHNAME = sd.NACHNAME, SEX=sd.SEX, NUTZER=sd.NUTZER, ORT1=sd.ORT1, STRASSE1=sd.STRASSE1, VERMIETER1=sd.VERMIETER1, GEBDAT=sd.GEBDAT, PASSWORT=sd.PASSWORT, PASSWORTAKTIV=sd.PASSWORTAKTIV, GORT=sd.GORT, GNAME=sd.GNAME, GDATUM=sd.GDATUM, EMAIL=sd.EMAIL, PLZ1=sd.PLZ1, ZEITSTEMPEL=sd.ZEITSTEMPEL, TELEFON1=sd.TELEFON1, TELEFON2=sd.TELEFON2, ORT2=sd.ORT2, STRASSE2=sd.STRASSE2, VERMIETER2=sd.VERMIETER2, PLZ2=sd.PLZ2, POSTADRESSE=sd.POSTADRESSE, LAND=sd.LAND, LAND1=sd.LAND1, LAND2=sd.LAND2, HOMEVERZEICHNIS=sd.HOMEVERZEICHNIS, AKADGRAD=sd.AKADGRAD, UNIV=sd.UNIV, MATRNRSTR=sd.MATRNRSTR, BAFOEG=sd.BAFOEG, NUTZERNAME=sd.NUTZERNAME, ANZAHLTAN=sd.ANZAHLTAN, PASSWORTAENDERN=sd.PASSWORTAENDERN, PASSWORTDATUM=sd.PASSWORTDATUM, NDSNUTZER=sd.NDSNUTZER, NAMENSZUSATZ=sd.NAMENSZUSATZ, FREISCHALTUNG=sd.FREISCHALTUNG, GLAND=sd.GLAND, HZB_NOTE=sd.HZB_NOTE, HZB_ART=sd.HZB_ART, PERSONID=sd.PERSONID, ANZAHLPASSWORT=sd.ANZAHLPASSWORT, ORGEINHEIT=sd.ORGEINHEIT, NACHNAMEASCII=sd.NACHNAMEASCII, MENTOR=sd.MENTOR, UNIVMATRNR=sd.UNIVMATRNR, REGID=sd.REGID, GASTHOERER=sd.GASTHOERER, STUDFACH=sd.STUDFACH, TUTOR=sd.TUTOR, PASSWORT_TEMP=sd.PASSWORT_TEMP, HSSTATUS=sd.HSSTATUS, ANDEREPERSON=sd.ANDEREPERSON, PFRAGE=sd.PFRAGE, PFANTWORT=sd.PFANTWORT, STUDIENFACH=sd.STUDIENFACH, ABSCHLUSS=sd.ABSCHLUSS, MAIL_LOCK=sd.MAIL_LOCK, EMAIL2=sd.EMAIL2, NOTE_ERLAUBT=sd.NOTE_ERLAUBT, PWDOLD=sd.PWDOLD, PLUSKONZEPT=sd.PLUSKONZEPT, ZERTBEANTRAGT=sd.ZERTBEANTRAGT, NACHTEILAKTIV=sd.NACHTEILAKTIV, NACHTEILOFFEN=sd.NACHTEILOFFEN, NACHTEILART=sd.NACHTEILART, TANSBEKOMMEN=sd.TANSBEKOMMEN   WHEN NOT MATCHED THEN INSERT (MATRNR, VORNAME, NACHNAME, SEX, NUTZER, ORT1, STRASSE1, VERMIETER1, GEBDAT, PASSWORT, PASSWORTAKTIV, GORT, GNAME, GDATUM, EMAIL, PLZ1, ZEITSTEMPEL, TELEFON1, TELEFON2, ORT2, STRASSE2, VERMIETER2, PLZ2, POSTADRESSE, LAND, LAND1, LAND2, HOMEVERZEICHNIS, AKADGRAD, UNIV, MATRNRSTR, BAFOEG, NUTZERNAME, ANZAHLTAN, PASSWORTAENDERN, PASSWORTDATUM, NDSNUTZER, NAMENSZUSATZ, FREISCHALTUNG, GLAND, HZB_NOTE, HZB_ART, PERSONID, ANZAHLPASSWORT, ORGEINHEIT, NACHNAMEASCII, MENTOR, UNIVMATRNR, REGID, GASTHOERER, STUDFACH, TUTOR, PASSWORT_TEMP, HSSTATUS, ANDEREPERSON, PFRAGE, PFANTWORT, STUDIENFACH, ABSCHLUSS, MAIL_LOCK, EMAIL2, NOTE_ERLAUBT, PWDOLD, PLUSKONZEPT, ZERTBEANTRAGT, NACHTEILAKTIV, NACHTEILOFFEN, NACHTEILART, TANSBEKOMMEN ) VALUES  (MATRNR, VORNAME, NACHNAME, SEX, NUTZER, ORT1, STRASSE1, VERMIETER1, GEBDAT, PASSWORT, PASSWORTAKTIV, GORT, GNAME, GDATUM, EMAIL, PLZ1, ZEITSTEMPEL, TELEFON1, TELEFON2, ORT2, STRASSE2, VERMIETER2, PLZ2, POSTADRESSE, LAND, LAND1, LAND2, HOMEVERZEICHNIS, AKADGRAD, UNIV, MATRNRSTR, BAFOEG, NUTZERNAME, ANZAHLTAN, PASSWORTAENDERN, PASSWORTDATUM, NDSNUTZER, NAMENSZUSATZ, FREISCHALTUNG, GLAND, HZB_NOTE, HZB_ART, PERSONID, ANZAHLPASSWORT, ORGEINHEIT, NACHNAMEASCII, MENTOR, UNIVMATRNR, REGID, GASTHOERER, STUDFACH, TUTOR, PASSWORT_TEMP, HSSTATUS, ANDEREPERSON, PFRAGE, PFANTWORT, STUDIENFACH, ABSCHLUSS, MAIL_LOCK, EMAIL2, NOTE_ERLAUBT, PWDOLD, PLUSKONZEPT, ZERTBEANTRAGT, NACHTEILAKTIV, NACHTEILOFFEN, NACHTEILART, TANSBEKOMMEN);";
                            break;
                        case "dbo.flex_prfstd_dummy"  :
                            merge = "MERGE INTO dbo.flex_prfstd as s USING dbo.flex_prfstd_dummy as sd ON (s.MATRNR = sd.MATRNR AND s.PRFFACH = sd.PRFFACH AND s.TEIlPRF = sd.TEILPRF AND s.SEMESTERNR = sd.SEMESTERNR) WHEN MATCHED THEN UPDATE SET  STUDENTFACH=sd.STUDENTFACH,MATRNR=sd.MATRNR,STUDFACH=sd.STUDFACH,STUDAB=sd.STUDAB,STUDABVER=sd.STUDABVER,FACHGRUPPE=	sd.FACHGRUPPE,PRFFACH=sd.PRFFACH,PRFFACHVER=sd.PRFFACHVER,TEILPRF=sd.TEILPRF,SEMESTERNR=sd.SEMESTERNR,TERMINNR=sd.TERMINNR,PRFANG=sd.PRFANG,ANMELDUNG=	sd.ANMELDUNG,PUNKTE=sd.PUNKTE,NOTE_=sd.NOTE_,FV=sd.FV,KORREKTUR=sd.KORREKTUR,NOTEDATUM=sd.NOTEDATUM,NOTEUSER=sd.NOTEUSER,NOTEZEIT=sd.NOTEZEIT,ANZAHL=sd.ANZAHL,PRFBEM=sd.PRFBEM,NEUANTRITT=sd.NEUANTRITT,ID_TA=	sd.ID_TA,VORBEHALT=sd.VORBEHALT,PNR=sd.PNR,NUTZER=sd.NUTZER,ZEITSTEMPEL=sd.ZEITSTEMPEL,ANERK_DURCH=sd.ANERK_DURCH,ANERK_HOCHSCHULE=	sd.ANERK_HOCHSCHULE,ANERK_DATUM=sd.ANERK_DATUM,VLGRUPPE=sd.VLGRUPPE,VLG=sd.VLG,LFDNR=sd.LFDNR,KONTOTYP=sd.KONTOTYP,LOGIN_=sd.LOGIN_,WWWFREIGABE=sd.WWWFREIGABE,PRFDATUM=sd.PRFDATUM,PRFBEGINN=sd.PRFBEGINN,PRFENDE=sd.PRFENDE,PRUEFERWAHL=sd.PRUEFERWAHL,TITEL=sd.TITEL,ABGABE=sd.ABGABE,STUDFACH_QUELLE=sd.STUDFACH_QUELLE,STUDAB_QUELLE=sd.STUDAB_QUELLE,STUDABVER_QUELLE=sd.STUDABVER_QUELLE,FACHGRUPPE_QUELLE=sd.FACHGRUPPE_QUELLE,PRFFACH_QUELLE=sd.PRFFACH_QUELLE,PRFFACHVER_QUELLE=	sd.PRFFACHVER_QUELLE,TEILPRF_QUELLE=sd.TEILPRF_QUELLE,SEMESTERNR_QUELLE=	sd.SEMESTERNR_QUELLE,TERMINNR_QUELLE=sd.TERMINNR_QUELLE,PRFANG_QUELLE=sd.PRFANG_QUELLE,FREIGABEDATUM=sd.FREIGABEDATUM,ZEUGNISTYP=sd.ZEUGNISTYP,POSITION=sd.POSITION,ANTRAGDATUM=sd.ANTRAGDATUM,GEBUCHT=sd.GEBUCHT,NOTESORT2=sd.NOTESORT2,FOLGEKONTOTYP=sd.FOLGEKONTOTYP,GEBUCHTANTEIL=sd.GEBUCHTANTEIL,NOTESORT=sd.NOTESORT,PPUNKTE=sd.PPUNKTE,DEFINITIV=sd.DEFINITIV,DOPPELANRECHNUNG=sd.DOPPELANRECHNUNG,KOMPZEUGNIS=sd.KOMPZEUGNIS,KOMPPOSITION=sd.KOMPPOSITION,ISINNOTE=sd.ISINNOTE,ABGABEREAL=sd.ABGABEREAL,VERLAENGERUNG=sd.VERLAENGERUNG,PRAXIS=sd.PRAXIS,EVAL=sd.EVAL,EVALCODE=sd.EVALCODE,VOLUMEN_STD=sd.VOLUMEN_STD,ZEUGNISVOL=sd.ZEUGNISVOL,KOMPZEUGNISVOL=sd.KOMPZEUGNISVOL,ZUSATZINFO=sd.ZUSATZINFO,ECTSGRADE=sd.ECTSGRADE,RANG=sd.RANG,TPG=sd.TPG,ISINDRUCK=sd.ISINDRUCK,VERSAND=sd.VERSAND,KORREKTURSOLL=sd.KORREKTURSOLL,KORREKTURVERL=sd.KORREKTURVERL,KORREKTURREAL=sd.KORREKTURREAL,UNTERBRECHUNG=sd.UNTERBRECHUNG,KOMPZEUGINDRUCK=sd.KOMPZEUGINDRUCK,KOMPZEUGINNOTE=sd.KOMPZEUGINNOTE,SCHREIBRECHT=sd.SCHREIBRECHT,ZAUSNAHME=sd.ZAUSNAHME,TEILPRFART=sd.TEILPRFART,MAILPUSH_SENT=sd.MAILPUSH_SENT WHEN NOT MATCHED THEN INSERT (STUDENTFACH,MATRNR,STUDFACH,STUDAB,STUDABVER,FACHGRUPPE,PRFFACH,PRFFACHVER,TEILPRF,SEMESTERNR,TERMINNR,PRFANG,ANMELDUNG,PUNKTE,NOTE_,FV,KORREKTUR,NOTEDATUM,NOTEUSER,NOTEZEIT,ANZAHL,PRFBEM,NEUANTRITT,ID_TA,VORBEHALT,PNR,NUTZER,ZEITSTEMPEL,ANERK_DURCH,ANERK_HOCHSCHULE,ANERK_DATUM,VLGRUPPE,VLG,LFDNR,KONTOTYP,LOGIN_,WWWFREIGABE,PRFDATUM,PRFBEGINN,PRFENDE,PRUEFERWAHL,TITEL,ABGABE,STUDFACH_QUELLE,STUDAB_QUELLE,STUDABVER_QUELLE,FACHGRUPPE_QUELLE,PRFFACH_QUELLE,PRFFACHVER_QUELLE,TEILPRF_QUELLE,SEMESTERNR_QUELLE,TERMINNR_QUELLE,PRFANG_QUELLE,FREIGABEDATUM,ZEUGNISTYP,POSITION,ANTRAGDATUM,GEBUCHT,NOTESORT2,FOLGEKONTOTYP,GEBUCHTANTEIL,NOTESORT,PPUNKTE,DEFINITIV,DOPPELANRECHNUNG,KOMPZEUGNIS,KOMPPOSITION,ISINNOTE,ABGABEREAL,VERLAENGERUNG,PRAXIS,EVAL,EVALCODE,VOLUMEN_STD,ZEUGNISVOL,KOMPZEUGNISVOL,ZUSATZINFO,ECTSGRADE,RANG,TPG,ISINDRUCK,VERSAND,KORREKTURSOLL,KORREKTURVERL,KORREKTURREAL,UNTERBRECHUNG,KOMPZEUGINDRUCK,KOMPZEUGINNOTE,SCHREIBRECHT,ZAUSNAHME,TEILPRFART,MAILPUSH_SENT) VALUES (STUDENTFACH,MATRNR,STUDFACH,STUDAB,STUDABVER,FACHGRUPPE,PRFFACH,PRFFACHVER,TEILPRF,SEMESTERNR,TERMINNR,PRFANG,ANMELDUNG,PUNKTE,NOTE_,FV,KORREKTUR,NOTEDATUM,NOTEUSER,NOTEZEIT,ANZAHL,PRFBEM,NEUANTRITT,ID_TA,VORBEHALT,PNR,NUTZER,ZEITSTEMPEL,ANERK_DURCH,ANERK_HOCHSCHULE,ANERK_DATUM,VLGRUPPE,VLG,LFDNR,KONTOTYP,LOGIN_,WWWFREIGABE,PRFDATUM,PRFBEGINN,PRFENDE,PRUEFERWAHL,TITEL,ABGABE,STUDFACH_QUELLE,STUDAB_QUELLE,STUDABVER_QUELLE,FACHGRUPPE_QUELLE,PRFFACH_QUELLE,PRFFACHVER_QUELLE,TEILPRF_QUELLE,SEMESTERNR_QUELLE,TERMINNR_QUELLE,PRFANG_QUELLE,FREIGABEDATUM,ZEUGNISTYP,POSITION,ANTRAGDATUM,GEBUCHT,NOTESORT2,FOLGEKONTOTYP,GEBUCHTANTEIL,NOTESORT,PPUNKTE,DEFINITIV,DOPPELANRECHNUNG,KOMPZEUGNIS,KOMPPOSITION,ISINNOTE,ABGABEREAL,VERLAENGERUNG,PRAXIS,EVAL,EVALCODE,VOLUMEN_STD,ZEUGNISVOL,KOMPZEUGNISVOL,ZUSATZINFO,ECTSGRADE,RANG,TPG,ISINDRUCK,VERSAND,KORREKTURSOLL,KORREKTURVERL,KORREKTURREAL,UNTERBRECHUNG,KOMPZEUGINDRUCK,KOMPZEUGINNOTE,SCHREIBRECHT,ZAUSNAHME,TEILPRFART,MAILPUSH_SENT);";
                              break;
                        case "dbo.flex_studenfach_sem_dummy":
                              merge = " MERGE INTO dbo.flex_studenfach_sem as s USING dbo.flex_studenfach_sem_dummy as sd ON (s.MATRNR = sd.MATRNR AND s.STUDFACH = sd.STUDFACH AND s.SEMESTERNR = sd.SEMESTERNR) WHEN MATCHED THEN UPDATE SET    STUDFACH = sd.STUDFACH,SEMESTERNR = sd.SEMESTERNR,FACHSEM = sd.FACHSEM,PRFSEM = sd.PRFSEM,SEMESTERTYP = sd.SEMESTERTYP,EDITED = sd.EDITED,IMMASEM = sd.IMMASEM,IMMADATUM = sd.IMMADATUM,EXMASEM = sd.EXMASEM,EXMADATUM = sd.EXMADATUM,UNIV =	sd.UNIV,TEILZEIT = sd.TEILZEIT,SEMANTEIL = sd.SEMANTEIL,SEMGEWICHTET = sd.SEMGEWICHTET,ABSCHL_ANG = sd.ABSCHL_ANG WHEN NOT MATCHED THEN INSERT (STUDFACH,SEMESTERNR,FACHSEM,PRFSEM,SEMESTERTYP,EDITED,IMMASEM,IMMADATUM,EXMASEM,EXMADATUM,UNIV,TEILZEIT,SEMANTEIL,SEMGEWICHTET,ABSCHL_ANG)VALUES  (STUDFACH,SEMESTERNR,FACHSEM,PRFSEM,SEMESTERTYP,EDITED,IMMASEM,IMMADATUM,EXMASEM,EXMADATUM,UNIV,TEILZEIT,SEMANTEIL,SEMGEWICHTET,ABSCHL_ANG);";
                            break;
                     }

                        SqlCommand command = new SqlCommand(merge, con);
                        command.ExecuteReader();

                        con.Close();
                        con.Open();

                        string delete = "DELETE FROM " + "dbo." + fi.Name.ToString().Remove(fi.Name.Length - 11, 11) + "_dummy";
                        SqlCommand command2 = new SqlCommand(delete, con);
                        command2.ExecuteReader();

                 }
                Label4.Text = "";
                Label4.Text = Label4.Text + "<br />Datei " + fi.Name + " erfolgreich importiert.";

                con.Close();

            }
                       
        }

        //backup
        private void BackUp()
        {
            //stelle Verbindung zur DB her
            String ConnectionCredentials = @"Data Source=msv-3188.sb.dfki.de\SQLEXPRESS;
                                             Initial Catalog=IWISQL;
                                             Persist Security Info=True;
                                             User ID=uid;   
                                             Password=vagina";

            SqlConnection con = new SqlConnection(ConnectionCredentials);

            con.Open();

            //erfasse Datum für Backup
            DateTime time = DateTime.Now;
            string format = "dd/MM/yyyy-HH.mm";
            string date = time.ToString(format);

            ZipFile zip = new ZipFile();

            var di = new DirectoryInfo(Server.MapPath("~/Analyzing/"));
            foreach (var fi in di.GetFiles())
            {

                //neue Backup-Datei erstellen
                string backuppath = Server.MapPath("~/Backup/") + fi.ToString();
                StreamWriter sw = new StreamWriter(backuppath, false, System.Text.Encoding.GetEncoding("iso-8859-1"));

                SqlDataAdapter da;

                //checke ob complete oder update
                if (completefiles.Contains(fi.Name))
                {
                    da = new SqlDataAdapter("select * from dbo." + fi.ToString().Remove(fi.Name.Length - 13, 13), con);
                }
                else
                {
                    da = new SqlDataAdapter("select * from dbo." + fi.ToString().Remove(fi.Name.Length - 11, 11), con);
                }

                DataSet ds = new DataSet();
                da.Fill(ds, "Emp");
                DataTable bdt = ds.Tables["Emp"];

                // Write the headers.
                int iColCount = bdt.Columns.Count;
                for (int i = 0; i < iColCount; i++)
                {
                    sw.Write(bdt.Columns[i]);
                    if (i < iColCount - 1) sw.Write(";");
                }

                sw.Write(sw.NewLine);

                // Write rows.
                foreach (DataRow dr in bdt.Rows)
                {
                    for (int i = 0; i < iColCount; i++)
                    {
                        if (!Convert.IsDBNull(dr[i]))
                        {
                            if (dr[i].ToString().StartsWith("0"))
                            {
                                sw.Write(@"=""" + dr[i] + @"""");
                            }
                            else
                            {
                                sw.Write(dr[i].ToString());
                            }
                        }

                        if (i < iColCount - 1) sw.Write(";");
                    }
                    sw.Write(sw.NewLine);
                }

                sw.Dispose();
                sw.Close();

                zip.AddFile(Server.MapPath("~/Backup/" + fi.Name), "");

            }

            Label3.Text = "Backup erstellt in: ~/Backup/backup." + date + ".zip";

            //Zip-Archiv erstellen
            zip.Save(Server.MapPath("~/Backup/backup." + date + ".zip"));

            //Begrenzung auf 5 backup-Files
            var Bdi = new DirectoryInfo(Server.MapPath("~/Backup/"));
            var numberBackups = Bdi.GetFiles().Length;

            if (numberBackups > 5)
            {
                var deletefile = Bdi.GetFileSystemInfos().OrderByDescending(de => de.CreationTime).Last();
                deletefile.Delete();
            }


            con.Close();

        }
       
    }

}